﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller;
using Interfaces;

namespace GUI
{
    public partial class FrmSælger : Form
    {
        Produktionssystem produktionssystem;

        public FrmSælger()
        {
            InitializeComponent();
            produktionssystem = new Produktionssystem();

            opdaterFærdigVareCbo();
            txtSamletPris.Text = udregnTotalPris();

            OpdaterFærdigVare.Enabled = true;
            OpdaterlstFaerdigVarer();

            chkPakke.Checked = true;
        }

        
        private void opdaterFærdigVareCbo()
        {
            cboFærdigvare.Items.Clear();
            for (int i = 0; i < produktionssystem.AntalFaerdigVareIVareCol(); i++)
            {
                // AØ
                cboFærdigvare.Items.Add(produktionssystem.FindFaerdigvarenumre(i).ToString() + " - " + produktionssystem.FindFaerdigVareBetegnelse(i));
            }
        }


        private void btnOpretKunde_Click(object sender, EventArgs e)
        {
            FrmKunde frmKunde = new FrmKunde();     // skab vare-formular
            this.Hide();      // Skjul hovedformular
            frmKunde.ShowDialog();  // Gå til vare-formular (Modal)
            this.Show();      // Vis hovedformular
        }

        private void Clear_felter()
        {
            txtKilo.Clear();
            txtPrisPrKg.Clear();
            chkFrys.Checked = false;
            chkHakke.Checked = false;
            chkOpskæring.Checked = false;
            chkPakke.Checked = true;
            cboFærdigvare.SelectedIndex = - 1;
        }       

        //JESPER - Registrer Ordre Linie
        private void btnOpretOrdre_Click(object sender, EventArgs e)
        {
            bool res;
            int kundenr;
            DateTime dato = DateTime.Now;
            DateTime leveringsdato;
            string betegnelse;
            int ordrenr;
            int varenr;
            int raavarenr;
            double kilo;
            double pris;
            bool type = false;
            ListViewItem linie;

            string opskr;
            string hak;
            string frys;
            string pak;
            
            leveringsdato = dtpLeveringsDato.Value;
           
            //Try-parse på Kunder!
            res = int.TryParse(txtKundenr.Text, out kundenr);
            if (!res)
            {
                MessageBox.Show("Indtast venligst kunde-Nr i heltal!");
                txtKundenr.Focus();
                return;
            }

            //Try-Parse på leveringsdato
            if (DateTime.Now > leveringsdato)
            {
                MessageBox.Show("Leveringsdatoen er ugyldig! Vælg venligst ny dato!");
                return;
            }

            if (!produktionssystem.OpretSalgsordre(kundenr, dato, leveringsdato))
            {
                MessageBox.Show("Fejl - Ordren kunne desværre ikke oprettes. Dette kan skyldes, at kunden ikke findes i databasen.");
                return;
            }

             ordrenr = produktionssystem.FindNytOrdreNrSalg();

             //Opret ordrelinier ved gennemløb af listview
             for (int i = 0; i < lstOrdreListe.Items.Count; i++)
             {
                 linie = lstOrdreListe.Items[i];
                 raavarenr = Convert.ToInt32(linie.SubItems[0].Text);
                 varenr = Convert.ToInt32(linie.SubItems[1].Text);
                 betegnelse = Convert.ToString(linie.SubItems[2].Text);
                 kilo = Convert.ToDouble(linie.SubItems[3].Text);
                 pris = Convert.ToDouble(linie.SubItems[4].Text);
                 opskr = Convert.ToString(linie.SubItems[6].Text);
                 hak = Convert.ToString(linie.SubItems[7].Text);
                 frys = Convert.ToString(linie.SubItems[8].Text);
                 pak = Convert.ToString(linie.SubItems[9].Text);

                 if (!produktionssystem.RegistrerOrdreLinie(ordrenr, varenr, raavarenr, kilo, type))
                 {
                     MessageBox.Show("Der er en fejl!");
                 }

                 //MADS - SENDER TIL TAVLER
                 if (opskr == "V")
                 {
                     produktionssystem.RegistrerTilTavler(1);
                 }
                 if (hak == "V")
                 {
                     produktionssystem.RegistrerTilTavler(2);
                 }
                 if (frys == "V")
                 {
                     produktionssystem.RegistrerTilTavler(3);
                 }
                 if (pak == "V")
                 {
                     produktionssystem.RegistrerTilTavler(4);
                 }
             }

             lstOrdreListe.Items.Clear();
             txtKundenr.Clear();
             txtSamletPris.Text = udregnTotalPris();
        }

        private void cboFærdigvare_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        //MADS JESPER - ORDRELINIER TIL ORDREVINDUET
        private void btnOrdreliste_Click(object sender, EventArgs e)
        {

            //til tavlerne
                string opskr = "-";
                string hak = "-";
                string frys = "-";
                string pak = "-";



            string raavare = produktionssystem.FindRaavarenumre(cboFærdigvare.SelectedIndex).ToString();
            string beskr = produktionssystem.FindFaerdigVareBetegnelse(cboFærdigvare.SelectedIndex).ToString();
            bool res;
            string varenr = produktionssystem.FindFaerdigvarenumre(cboFærdigvare.SelectedIndex).ToString();
            string raavarenr = Convert.ToString(produktionssystem.FindRaavareFraFaerdigvare(Convert.ToInt32(varenr)));
           
            
            //Try-Parse på KILO!
            int antalkg;
            res = int.TryParse(txtKilo.Text, out antalkg);
            if (!res)
            {
                MessageBox.Show("Indtast venligst kilo i heltal!");
                txtKilo.Focus();
                return;
            }

            //Try-Parse på PRIS!
            int pris;

            res = int.TryParse(txtPrisPrKg.Text, out pris);
            if (!res)
            {
                MessageBox.Show("Indtast venligst pris i heltal!");
                txtPrisPrKg.Focus();
                return;
            }


             int samletpris = antalkg * pris;

             if (chkOpskæring.Checked == true)
             {
                 opskr = "V";
             }
             if (chkHakke.Checked == true)
             {
                 hak = "V";
             }
             if (chkFrys.Checked == true)
             {
                 frys = "V";
             }
            if(chkPakke.Checked == true)
            {
                pak = "V";
            }

            ListViewItem faerdigvare = new ListViewItem(raavarenr);
            faerdigvare.SubItems.Add(varenr);
            faerdigvare.SubItems.Add(beskr);
            faerdigvare.SubItems.Add(Convert.ToString(antalkg));
            faerdigvare.SubItems.Add(Convert.ToString(pris));
            faerdigvare.SubItems.Add(Convert.ToString(samletpris));
            faerdigvare.SubItems.Add(Convert.ToString(opskr));
            faerdigvare.SubItems.Add(Convert.ToString(hak));
            faerdigvare.SubItems.Add(Convert.ToString(frys));
            faerdigvare.SubItems.Add(Convert.ToString(pak));

            
            
            lstOrdreListe.Items.Add(faerdigvare);
            Clear_felter();


            txtSamletPris.Text = udregnTotalPris();
        }

        private string udregnTotalPris()
        {
            double total = 0;

            for (int i = 0; i < lstOrdreListe.Items.Count; i++)
                total += Convert.ToDouble(lstOrdreListe.Items[i].SubItems[5].Text);  //(i,5) er der den samlet pris står
            
            return total.ToString(); 
        }
        
        private void OpdaterFærdigVare_Tick(object sender, EventArgs e)
        {
            lstRåvareLager.Items.Clear();
            OpdaterlstFaerdigVarer();
        }

        private void OpdaterlstFaerdigVarer()
        {
            for (int i = 0; i < produktionssystem.AntalFaerdigVareIVareCol(); i++)
            {
                ListViewItem vare = new ListViewItem(produktionssystem.FindFaerdigvarenumre(i).ToString());
                vare.SubItems.Add(produktionssystem.FindFaerdigVareBetegnelse(i));
                lstRåvareLager.Items.Add(vare);
            }

        }
    }
}
